<%@page import="java.util.Date"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.List" %>
<%--
  Created by IntelliJ IDEA.
  User: Skity666
  Date: 2020/5/17 0017
  Time: 15:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="Java"%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>乌拉</title>
  <style>
    .container {
      position: absolute;
      top: 100px;
      left: 50%;
      text-align: center;
      width: 400px;
      margin-left: -200px;
    }
  </style>
</head>
<body>
<%
  //全局配置下面img src所要用的路径
  String imageUrl="";
  try {
    //设置ContentType字段值
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");

    //获取字符流，可以使用writer.print()在页面打印值
    PrintWriter writer = response.getWriter();
    // 创建DiskFileItemFactory工厂对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //设置文件缓存目录，如果该目录不存在则新创建一个
    File f = new File("E:\\TempFolder");
    if (!f.exists()) {
      f.mkdirs();
    }
    // 设置文件的缓存路径
    factory.setRepository(f);
    // 创建 ServletFileUpload对象
    ServletFileUpload fileupload = new ServletFileUpload(factory);
    //设置字符编码
    fileupload.setHeaderEncoding("utf-8");

    //判断request.getContentType()不为空，也就是request里面没有form数据
    if(request.getContentType()!=null){
      // 解析 request，得到上传文件的FileItem对象
      List<FileItem> fileitems = fileupload.parseRequest(request);
      // 遍历集合
      for (FileItem fileitem : fileitems) {
        // 判断是否为普通文本表单字段
        if (fileitem.isFormField()) {
          //打印出来表单中对应的name和value
// 						writer.print(fileitem.getFieldName()+"：" + fileitem.getString("utf-8") + "<br>");
        } else {//文件表单字段
          // 获取上传的文件名
          String filename = fileitem.getName();
// 						System.out.println(filename);
          //如果文件名不为空
          if (filename != null && !filename.equals("")) {
// 							String message = "上传的文件名称是：" + filename + "<br>";
            // 截取出文件名前缀
            String prefix 	= 	filename.substring(0,filename.lastIndexOf("."));
            // 截取出文件名后缀
            String suffix	=	filename.substring(filename.lastIndexOf("."));
            // 文件名需要唯一
            filename=prefix+"_"+new Date().getTime()+suffix;
// 							System.out.println("截止"+prefix+suffix +"  "+filename);
            // 在服务器创建上传文件目录
            String webPath = "/upload/";
// 							System.out.println(request.getContextPath());
            //将服务器中文件夹路径组合成完整的服务器端路径
            String filepath = request.getSession().getServletContext().getRealPath(webPath);
//                        System.out.println(filepath);
//                        break;
            //判断服务器文件夹是否存在
            File webFile = new File(filepath);
            if (!webFile.exists()) {
              webFile.mkdirs();
            }

//	 						System.out.println("服务器目录路径：" + filepath);
            //将完整的服务器端路径加上文件名补全
            filepath=filepath+filename;
//	 						System.out.println("服务器文件路径：" + filepath);
            //判断文件是否存在
            File file = new File(filepath);
            if (!file.exists()) {
              file.createNewFile();
            }

            // 获得上传文件流
            InputStream in = fileitem.getInputStream();

            //为了Tomcat文件不因为跟项目同步而消失,而创建的本地文件
            //这是当前项目的路径，根据自己项目的实际路径更改
            String path = "E:\\MyPractice\\homework\\funplay\\src\\main\\webapp";
            String uploadName=path+"/upload/";
            File upload=new File(uploadName);
            if (!upload.exists()) {
              upload.mkdirs();
            }
            // 使用FileOutputStream打开服务器端的上传文件
            //FileOutputStream
            FileOutputStream out1 = new FileOutputStream(file);
            FileOutputStream out2 = new FileOutputStream(uploadName+filename);
            // 流的对拷
            byte[] buffer = new byte[1024];//每次读取1个字节
            int len;
            //开始读取上传文件的字节，并将其输出到服务端的上传文件输出流中
            while ((len = in.read(buffer)) > 0){
              out1.write(buffer, 0, len);
              out2.write(buffer, 0, len);
            }
            // 关闭流
            in.close();
            out1.close();
            out2.close();

            // 删除临时文件
            fileitem.delete();
            //删除缓存目录
            f.delete();
            //组成图片路径
            imageUrl=request.getContextPath()+webPath+filename;
// 							System.out.println("图片路径"+imageUrl);
          }
        }
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
    System.out.println("出错了");
  }
%>
<div class="container">
  <!--这里的index.jsp是你自己的jsp名字-->
  <form action="index.jsp" enctype="multipart/form-data" method="post"
  >
    <div>
      <!-- 			required="true"这句话表示这个字段不能为空 -->
      <span>name</span> <input type="text" name="name" value="" required>
    </div>
    <div>
      <img src="<%=imageUrl%>" alt="图片为空" id="image" width="50px" height="50px"
           align="middle"> <br> <input type="file" name="File"
                                       id="File" onchange="changeFile()" required>
    </div>
    <div>
      <span>班级：</span> <select name="classes">
      <option value="一班">一班</option>
      <option value="二班">二班</option>
      <option value="三班">三班</option>
    </select>
    </div>
    <div>
      <span>性别：</span> <input type="radio" name="sex" id="man" checked
                                value="男" />男 <input type="radio" name="sex" id="woman" value="女" />女
    </div>
    <div>
      <span>年龄:</span> <select name="age">
      <%
        for (int i = 1; i < 100; i++) {
      %>
      <option value="<%=i%>岁"><%=i%>岁
      </option>
      <%
        }
      %>
    </select>
    </div>
    <div>
      <button type="submit">上传</button>
    </div>
  </form>
</div>
<script type="text/javascript">
  //选择图片后渲染img
  function changeFile() {
    let image = document.getElementById('image');
    // var address = document.getElementById('File').value;
    // document.getElementById('address').innerHTML=address;
    //获得文件对象
    let name = document.getElementById('File').files[0];
    let url;
    //如果name不为空，创建相对的本地blob链接
    if (name) {
      url = window.URL.createObjectURL(name);
    }
    //渲染img
    image.src = url;
  }

</script>



</body>
</html>
